16|开闭原则

开闭原则

开闭原则(Open Close Principle)即对扩展开发,对修改关闭,指的是我们尽量新增功能代码(新增模块、类、方法),而不是去修改原有的功能代码(修改模块、功能、方法)。

如何实现具有开闭原则的代码

需求变更的时候通常是以新增功能代码的形式,而不是修改原有的功能代码,主要体现在以下几个方面

  1. 尽量不会修改以前的单元测试
  2. 没有破坏以往代码的正常执行
  3. 新增功能时候通常以新增类、方法的形式,对应的单元测试也是新加的而不改变以前的单元测试。

扩展与修改没有明确的界限

  • 扩展与修改之间由于代码粒度的不同,他们之间的联系没有绝对的界限。同样的一个代码改动,在粗粒度的代码下被认为是修改,而在细粒度的代码下认为是扩展。只要能够保证系统功能的正常运行,没有破坏原有的单元测试,我们就认为是符合开闭原则的。
  • 有些情况下,适当的代码修改是可以被接受的。我们要做的是尽量让修改操作更集中、更少、更上层,尽量让最核心、最复杂的那部分逻辑代码满足开闭原则。

    如何做到开闭原则

  • 时刻具备扩展意识、抽象意识、封装意识,在代码设计过程要训练向后思考的能力,为后面的需求变更留下扩展点。

  • 识别代码的可变部分和不可变部分,对可变部分进行抽象封装,提供不可变的抽象接口,当以后出现其他的变化的时候,我们基于这个不可变的抽象接口,实现新的变化来替换以前的部分。

如何运用开闭原则

预留扩展点

  • 对于业务系统,需要对业务有足够的了解,需要掌握未来可能会有的需求变化,从而预留扩展点
  • 对于底层技术系统,需要掌握系统如何使用,未来可能有哪些需求变化。
  • 预留扩展点并不是需要识别出所有的扩展点,因为我们不可能在设计阶段就掌握的所有的需求变化,通常我们会针对一些短期的、成本不高的扩展点进行预留,对于复杂的、成本较高的可以等需求驱动的时候进行重构添加扩展点。